﻿//
// Copyright (c) 2011 David Díaz & Fran Pedreira
//
// This file is part of PlanSim.
//
// PlanSim is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// PlanSim is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with PlanSim. If not, see <http://www.gnu.org/licenses/>.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using PlanSim.Core;

namespace PlanSim.Interfaz
{
    public partial class FormUsoRecurso : Form
    {
        Configuracion.AccesoADispositivo accDispositivo;
        
        /// <summary>
        /// Variable que nos indica si añadimos o editamos un acceso a dispositivo, ya que el 
        /// formulario es el mismo.
        /// </summary>
        public int mode;

        public FormUsoRecurso(Configuracion.AccesoADispositivo acc)
        {
            InitializeComponent();
            accDispositivo = acc;
        }

        private void cbCiclico_CheckedChanged(object sender, EventArgs e)
        {
            gbCiclo.Enabled = cbCiclico.Checked;
        }

        private void SoloNumeros_KeyPress(object sender, KeyPressEventArgs e)
        {

            if (Char.IsNumber(e.KeyChar) || Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }

        }

        private void FormUsoRecurso_Load(object sender, EventArgs e)
        {
            FormWizard form = (this.Owner as FormWizard); 
                        
            if (form.lvES.Items.Count > 0)
            {
                cbDispositivo.BeginUpdate();

                for (int i = 0; i < form.lvES.Items.Count; i++)
                {
                    cbDispositivo.Items.Add(form.lvES.Items[i].Text);
                }
                cbDispositivo.SelectedIndex = 0;
                cbDispositivo.EndUpdate();
            }
            
            if (mode == 2) 
            {
                int j = 0;
				bool encontrado = false;

                while (!encontrado && j<form.lvES.Items.Count)
                {
                    if (form.lvES.Items[j].Text == accDispositivo.Dispositivo)
                    {
                        cbDispositivo.SelectedIndex = j;
						encontrado = true;
                    }
                    else
					{
                        ++j;
                    }
                }
            }
        }

        private void bOk_Click(object sender, EventArgs e)
        {
            if (validaFormulario())
            {
                this.DialogResult = DialogResult.OK;
                Close();
            }
        }

        private bool validaFormulario()
        {

            if (!validaTexto(tNombre.Text))
            {
                MessageBox.Show("Tiene que describir el acceso a dipositivo (por ejemplo: <imprimir documento> o <enviar paquete TCP>)", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tNombre.Focus();
                return (false);
                
            }
            if (cbDispositivo.Text.Length == 0)
            {
                MessageBox.Show("Tiene que indicar el dispositivo", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cbDispositivo.Focus();
                return (false);
            }
            if (!validaNumero(tInicio.Text))
            {
                MessageBox.Show("El formato del periodo de uso del dispositivo, no es válido", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tInicio.Focus();
                return (false);
            }
            if (!validaNumero(tDuracion.Text))
            {
                MessageBox.Show("El formato de la duración del uso del dispositivo, no es válido", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tDuracion.Focus();
                return (false);
            }

            

            //Ya veremos si usamos esto o se queda comentado
            /*else if (cbCiclico.Checked)
            {
                if ((tCiclo.Text.Length == 0) || (tCiclo.Text == "0"))
                {
                    MessageBox.Show("Con acceso cíclico tiene que especificar cada cuanto se solicita", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return (false);
                    tCiclo.Focus();
                }

            }*/



           
            accDispositivo.Nombre = tNombre.Text;
            accDispositivo.Dispositivo=cbDispositivo.Text;
            accDispositivo.Ciclico = cbCiclico.Checked;
            accDispositivo.Periodo= Int32.Parse(tInicio.Text);
            accDispositivo.Duracion = Int32.Parse(tDuracion.Text);

           
            return (true);
        }
    

    private bool validaNumero(string s)
        {
            bool auxReturn = false;
            string expresion = @"^[1-9][0-9]*";

            if (Regex.IsMatch(s, expresion, RegexOptions.None))
            {
                if (Regex.Replace(s, expresion, String.Empty).Length == 0)
                {
                    auxReturn = true;
                }
            }
            return (auxReturn);
        }

        private bool validaTexto(string s)
        {
            bool auxReturn = false;
            string expresion = @"^[A-Za-z][0-9A-Za-z]*";

            if (Regex.IsMatch(s, expresion, RegexOptions.None))
            {
                if (Regex.Replace(s, expresion, String.Empty).Length == 0)
                {
                    auxReturn = true;
                }
            }
            return (auxReturn);
        }
    }

}
